/******************************************************************************

		dhorwin.cpp \212\117\214\360\201\105\225\337\227\270\203\105\203\102\203\223\203\150\203\105

										1998.4.16	KEN.KURATANI

******************************************************************************/

#include "stdafx.h"
#include "maincmd.h"
#include "san6view.h"
#include "gaikou.h"
#include "dgaiwin.h"
#include "dhorwin.h"
#include "comsub.h"
#include "msg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(GaikouHoryoWindow, GaikouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouHoryoWindow

BEGIN_MESSAGE_MAP(GaikouHoryoWindow, GaikouWindow)
	//{{AFX_MSG_MAP(GaikouHoryoWindow)
	ON_COMMAND(ID_HORYO_OK, OnOk)
	ON_COMMAND(ID_HORYO_CANCEL, OnCancel)
	ON_COMMAND(ID_HORYO_HORYO, OnHoryo)
	ON_COMMAND(ID_HORYO_BUSHOU, OnBushou)
	ON_COMMAND(ID_HORYO_JOUKEN, OnJouken)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

#if	defined(_PC)
GaikouHoryoWindow::GaikouHoryoWindow()
{
}

GaikouHoryoWindow::~GaikouHoryoWindow()
{
}
#endif

const	INT	HORYO_WIN_WX	= 144 + 8;
const	INT	HORYO_WIN_WY	= 160 + 8;
const	INT	HORYO_WIN_SX	= 12 - 4;
const	INT	HORYO_WIN_SY	= 12 - 4;
const	INT	HORYO_WIN_DX	= HORYO_WIN_SX + HORYO_WIN_WX;
const	INT	HORYO_WIN_DY	= HORYO_WIN_SY + HORYO_WIN_WY;

char*	GaikouHoryoWindow::m_strBtn[HORYO_BTN_MAX] = {
	"\225\337\227\270", "\225\220\217\253", "\217\360\214\217", "\214\210\222\350", "\222\206\216\176"
};

POINT	GaikouHoryoWindow::m_poBtn[HORYO_BTN_MAX] = {
	{4 + 4, 36 + 4},
	{4 + 4, 76 + 4},
	{4 + 4, 100 + 4},
	{20 + 4, 132 + 4},
	{84 + 4, 132 + 4},
};

CtrlLayout		GaikouHoryoWindow::ctrlLayout[HORYO_LAYOUT_MAX];
DialogLayout	GaikouHoryoWindow::Layout = {
	WINID_GAIKOUWIN, "GaikouHoryoWindow", {HORYO_WIN_SX, HORYO_WIN_SY, HORYO_WIN_DX, HORYO_WIN_DY},
	WS_POPUP|WS_BORDER, MAINTRANSMODE, DEFAULT_BACK, HORYO_LAYOUT_MAX, ctrlLayout
};

/* \203\214\203\103\203\101\203\105\203\147 */
VOID	GaikouHoryoWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_GAIKOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < HORYO_BTN_MAX ; i++ ) {
		POINT	po = m_poBtn[i];
		MakeSysButtonState1(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_GAIKOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\225\337\227\270", 4 + 4, 4 + 4);
	IMnum++;
	/* \225\113\227\166\213\103\227\315 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\213\103\227\31540", 92 + 4, 8 + 4);
	IMnum++;
	/* \225\337\227\270 */
	if ( ACTIVE(m_pkbHoryo) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkbHoryo->strName(), 44 + 4, 40 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 44 + 4, 40 + 4);
	}
	IMnum++;
	/* \225\337\227\270\201\151\214\121\227\131\201\152 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\214\121\227\131", 44 + 4, 56 + 4);
	IMnum++;
	if ( ACTIVE(m_pkkTgt) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkkTgt->strName(), 76 + 4, 56 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 76 + 4, 56 + 4);
	}
	IMnum++;
	/* \225\220\217\253 */
	if ( ACTIVE(m_pkb) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkb->strName(), 44 + 4, 80 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 44 + 4, 80 + 4);
	}
	IMnum++;
	/* \217\360\214\217 */
	GaikouWindow::DspJouken();
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), m_strJouken, 44 + 4, 104 + 4);
	IMnum++;
	ASSERT(HORYO_LAYOUT_MAX == num);
	ASSERT(HORYO_LAYOUT_MAX == IMnum);
}

static
INT	_sort_func_horyo(BPtr pkb)
{
	INT	kazu = pkb->iMiryoku() + (pkb->iSeiji() * 2);
	if ( pkb->isKoushou() ) {
		kazu *= 2;
	}
	return kazu;
}

BOOL GaikouHoryoWindow::InitData(TPtr pkt, MainCommand* pMainCmd, CWnd* pParentWnd)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	m_pParentWnd = pParentWnd;
	m_pDlgLayout = &Layout;
	m_iOkBtnID = ID_HORYO_OK;
	if ( NOTACTIVE(pkt) ) {
		return FALSE;
	}
	m_pMainCommand = pMainCmd;
	m_pkt = pkt;
	m_pkk = pkt->pkkShozoku();
	if ( NOTACTIVE(m_pkk) ) {
		return FALSE;
	}
	m_GaikouType = GAIKOU_HORYO;		/* \225\337\227\270 */
	m_BtnMax = HORYO_BTN_MAX;			/* \203\173\203\136\203\223\202\154\202\140\202\167 */
	m_TextMax = HORYO_TEXT_MAX;			/* \202\163\202\144\202\167\202\163 \202\154\202\140\202\167 */
	GaikouWindow::InitData();
	if ( 0 == m_pMainCommand->PickHoryoBushou(m_pkk, &m_BList) ) {
		return FALSE;
	}
	if ( 0 == m_pMainCommand->PickDoumeiKunshu(m_pkk, &m_KList) ) {	/* \224\361\223\257\226\277\214\116\216\345 */
		return FALSE;
	}
	if ( 0 == m_pMainCommand->PickHoryoBushouTgt(m_pkk, &m_BListHoryo) ) {
		return FALSE;
	}
	m_BList.Sort(_sort_func_horyo);
	return TRUE;
}

/* \203\136\203\103\203\147\203\213 */
VOID	GaikouHoryoWindow::SetTitle(VOID)
{
	UserCommandWindow::SetTextImage(&m_TextCtrl[0], "\225\337\227\270");	/* \203\173\203\136\203\223\202\314\203\166\203\214\201\133\203\147 */
	m_TextCtrl[1].SetPlate(TEXT_PLATE32, FALSE);
	m_TextCtrl[3].SetPlate(TEXT_PLATE32, FALSE);
	if ( UINT_MAX == m_unCtrlID ) {
		SelectCommand(ID_HORYO_HORYO);
		m_unCtrlID = ID_HORYO_HORYO;
	}
	ReviseFocus();							/* \203\164\203\110\201\133\203\112\203\130\217\103\220\263 */
	EnableOkButton(ID_HORYO_OK);			/* \202\156\202\152\203\173\203\136\203\223 */
	EnableJoukenButton(ID_HORYO_JOUKEN);	/* \217\360\214\217\203\173\203\136\203\223 */
}

VOID	GaikouHoryoWindow::SetHoryo(VOID)
{
	if ( pkbNull == m_pkb ) {
		ASSERT(FALSE);
		return;
	}
	if ( pkkNull == m_pkkTgt ) {
		ASSERT(FALSE);
		return;
	}
	if ( pkbNull == m_pkbHoryo ) {
		ASSERT(FALSE);
		return;
	}
	InitGaikouDataConfig();					/* \212\117\214\360\203\146\201\133\203\136\217\211\212\372\211\273 */
	SetGaikouData(&GaikouDataCfg);
}

/*****************************************************************************/

//		\225\220\217\253\226\274\201\101\225\337\202\347\202\246\202\304\202\242\202\351\214\121\227\131\226\274\201\101\223\235\227\246\201\101\225\220\227\315\201\101\222\155\227\315\201\101\220\255\216\241\201\101\226\243\227\315\201\101\223\340\226\261\214\157\214\261\201\101\214\122\226\261\214\157\214\261
static	B_PARAM	horyo_b_param[] = {
#ifdef _PC
/*			\202\157\202\162\227\160\217\103\220\263		1998/05/26 K.Takata
	BP_NAME,			// 001
	BP_SHOZAI,
	BP_NENREI,	// 10
	BP_CHUUSEI,
	BP_TOUSOTSU,		// 009
	BP_BURYOKU,			// 010
	BP_CHIRYOKU,		// 011
	BP_SEIJI,
	BP_MIRYOKU,
	BP_NAISEIEXP,		// 017
	BP_SENTOUEXP,		// 018
*/
#else	// _PC
	BP_NAME,			// 001
	BP_SHOZAI,
	BP_NENREI,	// 10
	BP_CHUUSEI,

	(B_PARAM)-32,

	BP_TOUSOTSU,		// 009
	BP_BURYOKU,			// 010
	BP_CHIRYOKU,		// 011
	BP_SEIJI,
	BP_MIRYOKU,
#endif	// _PC
	BP_NONE,			// 081

};

/* \225\337\227\270\221\111\221\360 */
VOID	GaikouHoryoWindow::SelectHoryo(VOID)
{
	TPtr	pkt;
	BPtr	pkb;
	KPtr	pkkOld;

	pkkOld = m_pkkTgt;
	pkb = SelectBushouSingle(m_BListHoryo, horyo_b_param, strNull, NULL);
	if ( pkbNull == pkb ) {
		return;
	}
	m_pkbHoryo = pkb;
	if ( pkbNull == m_pkbHoryo ) {
		m_pkkTgt = pkkNull;
	}
	else {
		if ( (pkt = m_pkbHoryo->pktShozai()) == pktNull ) {
			ASSERT(FALSE);
			m_pkkTgt = pkkNull;
		}
		else {
			m_pkkTgt = pkt->pkkShozoku();
		}
	}
	if ( pkkOld != m_pkkTgt ) {
		InitRank();							/* \212\257\210\312\217\211\212\372\211\273 */
	}
//	DspData();
}

/* \225\337\227\270\221\111\221\360 */
void	GaikouHoryoWindow::OnHoryo(GaikouHoryoWindow* pThis)
{
	pThis->m_unCtrlID = ID_HORYO_HORYO;
	pThis->EndModalLoop(ID_HORYO_HORYO);
}

/* \216\147\216\322\225\220\217\253\221\111\221\360 */
void	GaikouHoryoWindow::OnBushou(GaikouHoryoWindow* pThis)
{
	pThis->m_unCtrlID = ID_HORYO_BUSHOU;
	pThis->EndModalLoop(ID_HORYO_BUSHOU);
}

/* \217\360\214\217 */
void	GaikouHoryoWindow::OnJouken(GaikouHoryoWindow* pThis)
{
	pThis->m_unCtrlID = ID_HORYO_JOUKEN;
	pThis->EndModalLoop(ID_HORYO_JOUKEN);
}

/* \202\156\202\152\203\173\203\136\203\223\202\252\211\237\202\271\202\351\202\251 */
BOOL	GaikouHoryoWindow::ChkOkButton(VOID)
{
	if ( pkkNull == m_pkkTgt ) {
		return FALSE;
	}
	if ( pkbNull == m_pkb ) {
		return FALSE;
	}
	if ( pkbNull == m_pkbHoryo ) {
		return FALSE;
	}
	return TRUE;
}

VOID	GaikouHoryoWindow::OnOkButton(VOID)
{
	if ( !ChkOkButton() ) {
		return;
	}
	SetHoryo();
	EndModalLoop(IDOK);
}

/* \214\210\222\350 */
void	GaikouHoryoWindow::OnOk(GaikouHoryoWindow* pThis)
{
	pThis->OnOkButton();
}

/* \222\206\216\176 */
void	GaikouHoryoWindow::OnCancel(GaikouHoryoWindow* pThis)
{
	pThis->EndModalLoop(IDCANCEL);
}

/* \217\343\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouHoryoWindow::PushPadUp(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HORYO_HORYO:
		newCtrlID = ID_HORYO_OK;
		break;
	case ID_HORYO_OK:
	case ID_HORYO_CANCEL:
		newCtrlID = ID_HORYO_JOUKEN;
		break;
	default:
		CDialog::PushPad(PADKEY_UP);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \211\272\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouHoryoWindow::PushPadDown(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HORYO_JOUKEN:
		newCtrlID = ID_HORYO_OK;
		break;
	case ID_HORYO_OK:
	case ID_HORYO_CANCEL:
		newCtrlID = ID_HORYO_HORYO;
		break;
	default:
		CDialog::PushPad(PADKEY_DOWN);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \215\266\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouHoryoWindow::PushPadLeft(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_HORYO_OK == uCtrlID ) {
		newCtrlID = ID_HORYO_CANCEL;
	}
	else if ( ID_HORYO_CANCEL == uCtrlID ) {
		newCtrlID = ID_HORYO_OK;
	}
	SelectCommand(newCtrlID);
}

/* \211\105\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouHoryoWindow::PushPadRight(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_HORYO_OK == uCtrlID ) {
		newCtrlID = ID_HORYO_CANCEL;
	}
	else if ( ID_HORYO_CANCEL == uCtrlID ) {
		newCtrlID = ID_HORYO_OK;
	}
	SelectCommand(newCtrlID);
}

/* \203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouHoryoWindow::PushPad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_UP :
		PushPadUp();
		return;
	case PADKEY_DOWN :
		PushPadDown();
		return;
	case PADKEY_LEFT :
		PushPadLeft();
		return;
	case PADKEY_RIGHT :
		PushPadRight();
		return;
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		SelectAndPush(ID_HORYO_OK);
		return;
	default :
		break;
	}
	CDialog::PushPad(nPadID);
}

/* \217\225\214\276 */
VOID	GaikouHoryoWindow::Jogen(VOID)
{
	char	buf[256];

	if ( !ChkOkButton() ) {
		return;
	}
	if ( ACTIVE(m_pkbGunshi) ) {
		if ( (pkbNull == m_pkb) || (pkbNull == m_pkbHoryo) || (pkkNull == m_pkkTgt) ) {
			return;
		}
		if ( (m_pkbOld == m_pkb) && (m_pkkTgtOld == m_pkkTgt) && (m_pkbHoryoOld == m_pkbHoryo) ) {
			if ( !ChkJoukenCompare() ) {
				return;
			}
		}
		m_pkbOld		= m_pkb;
		m_pkkTgtOld		= m_pkkTgt;
		m_pkbHoryoOld	= m_pkbHoryo;
		m_iJoukenOld	= m_iJouken;
		m_iKinOld		= m_iKin;
		m_iKomeOld		= m_iKome;
		m_pkiOld		= m_pki;
		m_pkrOld		= m_pkr;
		BOOL	f1, f2;
		GaikouDataConfig	kgdc;
		InitGaikouDataConfig(&kgdc);
		SetGaikouData(&kgdc);
		f1 = isComHoryoSeikou(&kgdc);
		f2 = AdviceGunshi(m_pkbGunshi, m_pkb->iNum(), f1);
		if ( f2 ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gyhoryo, 4, m_pkbGunshi, m_pkb, m_pkbHoryo, m_pkkTgt->pkbBushou()));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gnhoryo, 4, m_pkbGunshi, m_pkb, m_pkbHoryo, m_pkkTgt->pkbBushou()));
		}
		BushouMsg(m_pkbGunshi, buf);
	}
}

/******************************* dhorwin.cpp *********************************/